An image may be represented by a two-dimensional (2D) array of pixels. For example, digital cameras include an array of image sensors (e.g. charged coupled devices (CCDs) or complementary metal-oxide-semiconductor (CMOS) sensors) for capturing pixel values representing an image. Image processing systems are available which process the pixel values representing an image. Image processing performed on pixel values of an image may include many different functions. For example, the pixel values may be modified (e.g. to improve the perceptual quality of the image), by functions such as filtering and sharpening. Other functions of image processing may be to compress or encode image data into particular formats, such as the Joint Photographic Experts Group (JPEG) format or the Moving Picture Experts Group (MPEG) format.
An image processing system may be implemented in a pipeline arrangement, whereby multiple processing blocks of the image processing system perform respective functions on pixels values representing an image. An image processing system will often include both single-line processing blocks and multi-line processing blocks. Single-line processing blocks act upon pixel values from a single line (e.g. a row) of pixels of the image without requiring access to pixel values from other pixel lines (e.g. rows) of the image. Examples of single-line processing blocks include a block to adjust the gains of the pixel values, a block to adjust the white balance of the pixel values and a one-dimensional (1D) filtering block which performs filtering along one of the lines (e.g. a row) of pixels.
In contrast, when a multi-line processing block acts upon pixel values from a line (e.g. a row) of pixels of the image it requires access to pixel values from multiple pixel lines (e.g. multiple rows) of the image. For example, a multi-line processing block may require access to pixel values from rows above the current pixel in a raster scan. Examples of multi-line processing blocks include a 2D filtering block and a 1D filtering block which performs filtering in a direction that is not parallel to the lines (e.g. rows) of pixels in the image. In order to allow a multi-line processing block to access pixel values from multiple lines (e.g. rows) of the image, the image processing system comprises a line store module which stores lines (e.g. rows) of pixel values of the image. Implementing a line store module uses power and silicon area in order to store the lines of pixel values.
Image processing systems often include more than one multi-line processing block. In this case, a line store module (which may also be referred to herein as a “line store bank”) is implemented before each multi-line processing block in the image processing system. This is shown in FIG. 1 which illustrates a simplified schematic diagram of part of an image processing system comprising two multi-line processing blocks 1021 and 1022 (e.g. which may be 2D processing blocks). The image processing system also comprises two line store modules 1041 and 1042. Multiple outputs of the line store module 1041 are coupled to respective multiple inputs of the processing block 1021. An output of the processing block 1021 is coupled to an input of the line store module 1042. This connection is shown by a dashed line in FIG. 1 because there may or may not be other functional blocks (not shown in FIG. 1) which act on the image data between the output from the processing block 1021 and the input to the line store module 1042. Multiple outputs of the line store module 1042 are coupled to respective multiple inputs of the processing block 1022.
As illustrated in FIG. 1, in operation, the line store module 1041 is arranged to receive an input data stream. The input data stream may provide the pixel values relating to the rows of the image in a serial manner (according to the raster scan) to the line store module 1041. The line store module 1041 stores the pixel values for a plurality of rows of the image. In one example, on each of a plurality of consecutive clock cycles the line store module 1041 may provide multiple pixel values, from respective multiple rows of the image to the multi-line processing block 1021. The multi-line processing block 1021 processes the inputs (e.g. by performing 2D filtering to thereby filter the pixel values for a central row based on the surrounding pixel values) and provides a single output pixel value (e.g. a filtered pixel value of the central row) per clock cycle. The single row output stream may pass from the multi-line processing block 1021 to the line store module 1042. As described above, there may, or may not, be other functional blocks in the image processing system implemented between the processing block 1021 and the line store module 1042.
The line store module 1042 and multi-line processing block 1022 correspond to the line store module 1041 and multi-line processing block 1021, and function in a corresponding manner. In this way, multiple outputs are provided from the line store module 1042 to multiple inputs of the processing block 1022 which are then processed (e.g. filtered) by the multi-line processing module 1022 to provide a single output stream of pixel values.
A line store module 104 is implemented before each multi-line processing block 102 in the image processing system to provide the multiple row inputs required by the respective multi-line processing block 102.